import org.junit.Test;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;

/*
 *@Student 张策
 */
public class FS {
    public static void main(String[] args) {

    }
    @Test
    public void api2() throws ClassNotFoundException {
        Class<?> personCls = Class.forName("Person");
        //getDeclaredFields获得本类中的所有属性
        //getModifiers()获得修饰符的代表队值
        Field[] declaredFields = personCls.getDeclaredFields();
        for (Field f:declaredFields){
            System.out.println("本类中的所有属性"+f.getName()+"修饰符值"+f.getModifiers()+"类型"+f.getType());
        }
    }
    @Test
    public void api1() throws ClassNotFoundException {
        //得到Class对象
        Class<?> personCls = Class.forName("Person");
        //getName:获取全类名
        System.out.println(personCls.getName());
        //获取简单的类名
        System.out.println(personCls.getSimpleName());
        //获取所有public修饰的属性，包含本类以及父类
        Field[] fields = personCls.getFields();
        for (Field f:fields){
            System.out.println("本类以及父类的所有public属性"+f.getName());
        }
        //getDeclaredFields获得本类中的所有属性
        Field[] declaredFields = personCls.getDeclaredFields();
        for (Field f:declaredFields){
            System.out.println("本类中的所有属性"+f.getName());
        }
        //getPackage(),以Package的形式放回包信息
        System.out.println(personCls.getPackage());
        //以Class形式返回父类信息
        Class<?> superclass = personCls.getSuperclass();
        System.out.println(superclass);
        //getInterfaces以 Class[]形式返回接口信息
        Class<?>[] interfaces = personCls.getInterfaces();
        for (Class c1:interfaces){
            System.out.println("接口信息:"+c1);
        }
        Annotation[] annotations = personCls.getAnnotations();
        for (Annotation a:annotations){
            System.out.println("注解信息:"+ a);
        }
    }

}
class A{
    public String hok;
    public void hi(){

    }
}
interface ia{

}
interface ib{

}
@Deprecated
class Person extends A implements ia,ib{
    public String name;
    protected int age;
    int val;
    private double sal;
    public void m1(){

    }
    protected void m2(){

    }
    void m3(){

    }
    private void m4(){

    }

}
